package co.com.desarrollo.pedidos.services.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import co.com.desarrollo.pedidos.dao.TiendaDAO;
import co.com.desarrollo.pedidos.entities.Producto;
import co.com.desarrollo.pedidos.entities.Tienda;
import co.com.desarrollo.pedidos.services.ProductoService;
import co.com.desarrollo.pedidos.services.TiendaService;
import co.com.desarrollo.pedidos.services.exceptions.ProductoNotFoundException;
import co.com.desarrollo.pedidos.services.exceptions.TiendaNotFoundException;

@Service("tiendaService")
public class TiendaServiceImpl implements TiendaService {

	@Autowired
	private TiendaDAO tiendaDAO;
	@Autowired
	private ProductoService productoService;
	
	@Override
	public void activarTienda(Tienda tienda) throws TiendaNotFoundException {
		tienda = findTiendaBothMethods(tienda);
		tienda.setActivo(1);
		setTienda(tienda);
	}

	@Override
	public void desactivarTienda(Tienda tienda) throws TiendaNotFoundException {
		tienda = findTiendaBothMethods(tienda);
		tienda.setActivo(0);
		setTienda(tienda);
	}

	@Override
	public List<Tienda> getAllTiendas() {
		return tiendaDAO.findAll();
	}

	@Override
	public Tienda getTiendaById(Tienda tienda) {
		return tiendaDAO.findById(tienda.getIdtienda());
	}

	@Override
	public Tienda getTiendaByName(Tienda tienda) {
		return tiendaDAO.findByName(tienda.getNombre());
	}

	@Override
	public List<Tienda> getTiendasActivas() {
		return tiendaDAO.findTiendasActivas();
	}

	@Override
	public void setTienda(Tienda tienda) {
		tiendaDAO.store(tienda);
	}

	public Tienda findTiendaBothMethods(Tienda tienda) throws TiendaNotFoundException	{
		Tienda tiendaFound = getTiendaById(tienda);
		if (tiendaFound == null)
			tienda = getTiendaByName(tienda);
		else
			tienda = tiendaFound;
		if (tienda!=null)
			return tienda;
		throw new TiendaNotFoundException("La tienda solicitada no existe.");
	}
	
	@Override
	public void addProductoTienda(Tienda tienda, Producto producto) throws ProductoNotFoundException, TiendaNotFoundException {
		tienda = findTiendaBothMethods(tienda);
		producto = productoService.findProductoBothMethods(producto);
		
		List<Producto> productos = tienda.getProductos();
		productos.add(producto);
		
		tiendaDAO.store(tienda);
	}

	@Override
	public void removeProductoTienda(Tienda tienda, Producto producto) throws ProductoNotFoundException, TiendaNotFoundException {
		tienda = findTiendaBothMethods(tienda);
		producto = productoService.findProductoBothMethods(producto);
		
		List<Producto> productos = tienda.getProductos();
		for (Producto productoIte : productos) {
			if (producto.equalsId(productoIte)) {
				productos.remove(productoIte);
				break;
			}
		}		
		tiendaDAO.store(tienda);
	}
}
